package org.walkerljl.commons.lock;

/**
 * 锁
 *
 * @author lijunlin
 */
public interface Lock {

    /**
     * 加锁<br>
     * 直到获取锁，否则一直阻塞等待
     *
     * @param resource         资源
     * @param expectedLockTime 期望锁定时间(毫秒)
     * @return
     */
    boolean lock(String resource, long expectedLockTime);

    /**
     * 尝试加锁<br/>
     * 立即返回，成功：true，失败：false
     *
     * @param resource         资源
     * @param expectedLockTime 期望锁定时间(毫秒)
     * @return
     */
    boolean tryLock(String resource, long expectedLockTime);

    /**
     * 在指定时间段内尝试加锁<br>
     * 加锁成功：true， 超时或失败返回：false
     *
     * @param resource         资源
     * @param expectedLockTime 期望锁定时间(毫秒)
     * @param timeout          获取锁超时时间(毫秒)
     * @return
     */
    boolean tryLock(String resource, long expectedLockTime, long timeout);

    /**
     * 解锁
     *
     * @param resource 资源
     */
    void unlock(String resource);
}